# flask 操作数据库
# 导包  pymysql
import pymysql
#md5加密
import hashlib  # md5python的类库用来加密使用  内置  不需要安装

# 数据密码加密方法
def make_password(password):

    # 实例化md5对象
    md5 = hashlib.md5()

    # 转码 md5底层  把明文密码传过来转为utf8
    sign_utf8 = str(password).encode(encoding='utf-8')

    # 进行加密操作
    md5.update(sign_utf8)

    #返回密文
    return md5.hexdigest()





class Db:
    # 初始化方法
    def __init__(self):
        # 链接数据库
        self.conn = pymysql.connect(host='localhost', user='root', passwd='123', db='myflask', charset='utf8')

    # 插入方法
    def insert(self, sql):
        # 创建游标对象
        self.cursor = self.conn.cursor()
        # 执行sql语句
        self.cursor.execute(sql)
        # 提交sql
        self.conn.commit()
        return 'ok'

    #修改操作
    def update(self,sql):
        # 创建游标对象
        self.cursor = self.conn.cursor()
        # 执行sql语句
        self.cursor.execute(sql)
        # 提交sql
        self.conn.commit()
        return 'update ok'
    # 查询方法 查询单个数据
    def get_one(self,sql):
        # 创建游标对象
        self.cursor = self.conn.cursor()
        # 执行sql
        self.cursor.execute(sql)
        # 获取数据
        res = self.cursor.fetchall()
        # 返回结果
        return res

    # 析构方法
    def __del__(self):
        # 关闭游标
        self.cursor.close
        # 关闭数据库连接
        self.conn.close


# 实例化对象
db = Db()
# 调用方法  写`为了和sql关键字区分开
# res = db.insert(" insert into `user` (`username`,`password`,`phton`) value('admin123','%s','18595604641') " % make_password('123'))
# res = db.update("update `user` set `username`= '123ad' where `id`=7")
# 打印返回值
res = db.get_one("select * from `user` ")
print(res)

# 写封装常见三问题      3.6之后版本自动继承object    缩进问题   忘记写self
